package l1j.opqlo.Server.etcitem.卷軸;

import l1j.opqlo.Server.L1World.L1World;
import l1j.server.server.datatables.MapsTable;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.Instance.L1TowerInstance;
import l1j.server.server.serverpackets.S_Message_YN;
import l1j.server.server.serverpackets.S_ServerMessage;

public class ReactivatingScroll {

	/** 復活卷軸相關 */
	// } else if (itemId == 40089 || itemId == 140089) { // 復活スクロール、祝福された復活スクロール

	public static void begin(final int[] newdata, final L1PcInstance pc,final L1ItemInstance l1iteminstance) {

		// 對象OBJID
		final int resid = newdata[0];
		// 取得目標資料
		final L1Character resobject = (L1Character) L1World.getInstance()
				.findObject(resid);

		// 例外狀況:物件為空
		if (resobject == null) {
			return;
		}
		// 例外狀況:物件是自己
		if (resobject.getId() == pc.getId()) {
			return;
		}
		// 例外狀況:物件沒有死亡
		if (resobject.getCurrentHp() > 0 && !resobject.isDead()) {
			return;
		}

		if (resobject instanceof L1PcInstance) {
			if(!MapsTable.getInstance().isUseResurrection(resobject.getMapId())){
				pc.sendPackets(new S_ServerMessage(592));
				return;
			}
			final L1PcInstance target = (L1PcInstance) resobject;
			if (L1World.getInstance().getVisiblePlayer(target, 0).size() > 0) {
				for (final L1PcInstance visiblePc : L1World.getInstance()
						.getVisiblePlayer(target, 0)) {
					if (!visiblePc.isDead()) {// \f1その場所に他の人が立っているので復活させることができません。
						pc.sendPackets(new S_ServerMessage(592));
						return;
					}
				}
			}
			if (pc.getMap().isUseResurrection()) {
				target.setTempID(pc.getId());
				final int itemId = l1iteminstance.getItemId();
				if (itemId == 40089) {// また復活したいですか？（Y/N）
					target.sendPackets(new S_Message_YN(321, ""));
				} else if (itemId == 140089) {// また復活したいですか？（Y/N）
					target.sendPackets(new S_Message_YN(322, ""));
				}
			} else {
				return;
			}

		} else if (resobject instanceof L1NpcInstance) {
			if (!(resobject instanceof L1TowerInstance)) {
				final L1NpcInstance npc = (L1NpcInstance) resobject;
				if (npc.getNpcTemplate().isCantResurrect()
						&& !(npc instanceof L1PetInstance)) {
					pc.getInventory().removeItem(l1iteminstance, 1);
					return;
				}
				if (npc instanceof L1PetInstance
						&& L1World.getInstance().getVisiblePlayer(npc, 0)
								.size() > 0) {
					for (final L1PcInstance visiblePc : L1World.getInstance()
							.getVisiblePlayer(npc, 0)) {
						if (!visiblePc.isDead()) {// \f1その場所に他の人が立っているので復活させることができません。
							pc.sendPackets(new S_ServerMessage(592));
							return;
						}
					}
				}
				if (npc.isDead()) {
					npc.resurrect(npc.getMaxHp() / 4);
					npc.setResurrect(true);
				}
			}
		}

		pc.getInventory().removeItem(l1iteminstance, 1);
	}
}
